PROP_CURSOR_VISIBLE,
PROP_BUFFER,
PROP_OVERWRITE,
+ PROP_TAB_MOVES_FOCUS,
LAST_PROP
};
FALSE,
G_PARAM_READWRITE));
-
+ g_object_class_install_property (gobject_class,
+ PROP_TAB_MOVES_FOCUS,
+ g_param_spec_boolean ("tab_moves_focus",
+ _("Tab moves focus"),
+ _("Whether tab moves focus"),
+ FALSE,
+ G_PARAM_READWRITE));
+
/*
* Signals
*/
gtk_text_view_set_buffer (text_view, GTK_TEXT_BUFFER (g_value_get_object (value)));
break;
+ case PROP_TAB_MOVES_FOCUS:
+ gtk_text_view_set_tab_moves_focus (text_view, g_value_get_boolean (value));
+ break;
+
default:
g_assert_not_reached ();
break;
case PROP_OVERWRITE:
g_value_set_boolean (value, text_view->overwrite_mode);
break;
+
+ case PROP_TAB_MOVES_FOCUS:
+ g_value_set_boolean (value, text_view->tab_moves_focus);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
event->keyval == GDK_KP_Tab) &&
!(event->state & GDK_CONTROL_MASK))
{
- /* If the text widget isn't editable overall, move the focus
- * instead
+ /* If the text widget isn't editable overall, or if the application
+ * has turned on "tab_moves_focus", move the focus instead
*/
- if (text_view->editable)
+ if (!text_view->tab_moves_focus && text_view->editable)
{
gtk_text_view_commit_text (text_view, "\t");
obscure = TRUE;
}
}
+/**
+ * gtk_text_view_set_tab_moves_focus:
+ * @text_view: A #GtkTextView
+ * @tab_moves_focus: %TRUE if pressing the Tab should move the keyboard focus, %FALSE, if pressing the Tab key should insert a Tab character.
+ *
+ * Sets the behavior of the text widget when the Tab key is pressed. If @tab_moves_focus
+ * is %TRUE the keyboard focus is moved to the next widget in the focus chain. If
+ * @tab_moves_focus is %FALSE a tab character is inserted.
+ *
+ * Since: 2.4
+ **/
+void
+gtk_text_view_set_tab_moves_focus (GtkTextView *text_view,
+ gboolean tab_moves_focus)
+{
+ g_return_if_fail (GTK_IS_TEXT_VIEW (text_view));
+
+ tab_moves_focus = tab_moves_focus != FALSE;
+
+ if (text_view->tab_moves_focus != tab_moves_focus)
+ {
+ text_view->tab_moves_focus = tab_moves_focus;
+
+ g_object_notify (G_OBJECT (text_view), "tab_moves_focus");
+ }
+}
+
+/**
+ * gtk_text_view_get_tab_moves_focus:
+ * @text_view: A #GtkTextView
+ *
+ * Returns whether pressing the Tab key moves the keyboard focus. See
+ * gtk_text_view_set_tab_moves_focus().
+ *
+ * Return value: %TRUE if pressing the Tab key moves the keyboard focus.
+ *
+ * Since: 2.4
+ **/
+gboolean
+gtk_text_view_get_tab_moves_focus (GtkTextView *text_view)
+{
+ g_return_val_if_fail (GTK_IS_TEXT_VIEW (text_view), FALSE);
+
+ return text_view->tab_moves_focus;
+}
+
static void
gtk_text_view_move_focus (GtkTextView *text_view,
GtkDirectionType direction_type)
/* if we have reset the IM since the last character entered */
guint need_im_reset : 1;
- /* these flags are no longer used */
- guint reserved1 : 1;
- guint reserved2 : 1;
+ guint tab_moves_focus : 1;
+
+ /* this flag is no longer used */
+ guint reserved : 1;
/* debug flag - means that we've validated onscreen since the
* last "invalidate" signal from the layout
void gtk_text_view_set_overwrite (GtkTextView *text_view,
gboolean overwrite);
gboolean gtk_text_view_get_overwrite (GtkTextView *text_view);
+void gtk_text_view_set_tab_moves_focus (GtkTextView *text_view,
+ gboolean tab_moves_focus);
+gboolean gtk_text_view_get_tab_moves_focus (GtkTextView *text_view);
void gtk_text_view_set_pixels_above_lines (GtkTextView *text_view,
gint pixels_above_lines);
gint gtk_text_view_get_pixels_above_lines (GtkTextView *text_view);